/*
 * Game mediator
 *
 * Контракт сервиса и бота для игры в крестики нолики
 *
 * OpenAPI spec version: 1.0.0
 * 
 * Generated by: https://github.com/swagger-api/swagger-codegen.git
 */

using System.Runtime.Serialization;
using System.Text;
using Newtonsoft.Json;

namespace TicTacToeBot.Models;

/// <summary>
/// 
/// </summary>
[DataContract]
public partial class RegisterBotInSessionResponse : IEquatable<RegisterBotInSessionResponse>
{ 
    /// <summary>
    /// Gets or Sets Figure
    /// </summary>
    [DataMember(Name="figure")]
    public char Figure { get; set; }

    /// <summary>
    /// Returns the string presentation of the object
    /// </summary>
    /// <returns>String presentation of the object</returns>
    public override string ToString()
    {
        var sb = new StringBuilder();
        sb.Append("class RegisterBotInSessionResponse {\n");
        sb.Append("  Figure: ").Append(Figure).Append("\n");
        sb.Append("}\n");
        return sb.ToString();
    }

    /// <summary>
    /// Returns the JSON string presentation of the object
    /// </summary>
    /// <returns>JSON string presentation of the object</returns>
    public string ToJson()
    {
        return JsonConvert.SerializeObject(this, Formatting.Indented);
    }

    /// <summary>
    /// Returns true if objects are equal
    /// </summary>
    /// <param name="obj">Object to be compared</param>
    /// <returns>Boolean</returns>
    public override bool Equals(object obj)
    {
        if (ReferenceEquals(null, obj)) return false;
        if (ReferenceEquals(this, obj)) return true;
        return obj.GetType() == GetType() && Equals((RegisterBotInSessionResponse)obj);
    }

    /// <summary>
    /// Returns true if RegisterBotInSessionResponse instances are equal
    /// </summary>
    /// <param name="other">Instance of RegisterBotInSessionResponse to be compared</param>
    /// <returns>Boolean</returns>
    public bool Equals(RegisterBotInSessionResponse? other)
    {
        if (ReferenceEquals(null, other)) return false;
        if (ReferenceEquals(this, other)) return true;

        return 
        (
            Figure == other.Figure ||
            Figure.Equals(other.Figure)
        );
    }

    /// <summary>
    /// Gets the hash code
    /// </summary>
    /// <returns>Hash code</returns>
    public override int GetHashCode()
    {
        unchecked // Overflow is fine, just wrap
        {
            var hashCode = 41;
            // Suitable nullity checks etc, of course :)
            if (Figure != null)
                hashCode = hashCode * 59 + Figure.GetHashCode();
            return hashCode;
        }
    }

    #region Operators
#pragma warning disable 1591

    public static bool operator ==(RegisterBotInSessionResponse left, RegisterBotInSessionResponse right)
    {
        return Equals(left, right);
    }

    public static bool operator !=(RegisterBotInSessionResponse left, RegisterBotInSessionResponse right)
    {
        return !Equals(left, right);
    }

#pragma warning restore 1591
    #endregion Operators
}